So, you want to make yourself a Comprehensive Foo Archive Network...
1. Self-upgrading client.
2. configure_requires (compile-time dependency declaration)
3. Cross-compile-able (no $^O conditionals in the runtime.)
I'm sure there's more, but 1 & 2 really sort of cover everything (well, enable you to fix it if you're wrong.) The #3 is really just about "wow that hurts" if it has been hard-coded into the assumptions for far too long.
I'd phrase that differently
Alias on 2007-07-21T14:00:01
1. Self-upgrading client
2. Turing-complete configuration/dependency determination
2a. Non-turing-complete dependencies for the turing-complete configuration
3. Integrated package testing
These are the three things you REALLY need to deal with multiple platforms, and varying situations.
I'd class the cross-compilation is troublesome, mostly because as I understand it you can't easily (or at all) run the tests.